﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 使用高阶委托实现事件机制
// 实现一个简单的事件机制，其中事件使用高阶委托。
// 任务:
// 定义一个 EventHandler 委托，它接受一个 string 参数。
// 创建一个 EventPublisher 类，它包含一个事件 OnEvent，并触发事件。
// 创建一个 EventSubscriber 类，它订阅 EventPublisher 的事件并处理事件。
// 在 Main 方法中创建 EventPublisher 和 EventSubscriber 的实例，并触发事件。
namespace CS_BEGINNER_TO_PROFICIENT.STD.DelegatedSTD
{
    public delegate void EventHandler(string msg);

    public class EventPublisher
    {
        public event EventHandler OnEvent;

        public void RaiseEvent(string msg)
        {
            OnEvent?.Invoke(msg);
        }
    }

    public class EventSubscriber
    {
        public void OnEventChange(string msg)
        {
            Console.WriteLine("RaiseEvent: " + msg);
        }
    }

    public class DelegatedSTDP11
    {
        public static void Execute()
        {
            EventPublisher publisher = new EventPublisher();
            EventSubscriber subscriber = new EventSubscriber();

            publisher.OnEvent += subscriber.OnEventChange;
            publisher.RaiseEvent("Hello World!");
        }
    }
}
